<run>
  <precisionModel scale="1.0" offsetx="0.0" offsety="0.0"/>

<case>
  <desc>AA disjoint</desc>
  <a>
    POLYGON(
      (0 0, 80 0, 80 80, 0 80, 0 0))
  </a>
  <b>
    POLYGON(
      (100 200, 100 140, 180 140, 180 200, 100 200))
  </b>
<test>
  <op name="relate" arg3="FF2FF1212" arg1="A" arg2="B">
    true
  </op>
</test>
</case>

<case>
  <desc>AA equal but opposite orientation</desc>
  <a>
    POLYGON(
      (0 0, 140 0, 140 140, 0 140, 0 0))
  </a>
  <b>
    POLYGON(
      (140 0, 0 0, 0 140, 140 140, 140 0))
  </b>
<test>
  <op name="relate" arg3="2FFF1FFF2" arg1="A" arg2="B">
    true
  </op>
</test>
</case>

<case>
  <desc>AA A-shell contains B-shell</desc>
  <a>
    POLYGON(
      (40 60, 360 60, 360 300, 40 300, 40 60))
  </a>
  <b>
    POLYGON(
      (120 100, 280 100, 280 240, 120 240, 120 100))
  </b>
<test>
  <op name="relate" arg3="212FF1FF2" arg1="A" arg2="B">
    true
  </op>
</test>
</case>

<case>
  <desc>AA A-shell contains B-shell contains A-hole</desc>
  <a>
    POLYGON(
      (40 60, 420 60, 420 320, 40 320, 40 60), 
      (200 140, 160 220, 260 200, 200 140))
  </a>
  <b>
    POLYGON(
      (80 100, 360 100, 360 280, 80 280, 80 100))
  </b>
<test>
  <op name="relate" arg3="2121F12F2" arg1="A" arg2="B">
    true
  </op>
</test>
</case>

<case>
  <desc>AA A-shell contains B-shell contains A-hole contains B-hole</desc>
  <a>
    POLYGON(
      (0 280, 0 0, 260 0, 260 280, 0 280), 
      (220 240, 40 240, 40 40, 220 40, 220 240))
  </a>
  <b>
    POLYGON(
      (20 260, 240 260, 240 20, 20 20, 20 260), 
      (160 180, 80 180, 120 120, 160 180))
  </b>
<test>
  <op name="relate" arg3="2121F1212" arg1="A" arg2="B">
    true
  </op>
</test>
</case>

<case>
  <desc>AA A-shell overlapping B-shell</desc>
  <a>
    POLYGON(
      (60 80, 200 80, 200 220, 60 220, 60 80))
  </a>
  <b>
    POLYGON(
      (120 140, 260 140, 260 260, 120 260, 120 140))
  </b>
<test>
  <op name="relate" arg3="212101212" arg1="A" arg2="B">
    true
  </op>
</test>
</case>

<case>
  <desc>AA A-shell overlapping B-shell at B-vertex</desc>
  <a>
    POLYGON(
      (60 220, 220 220, 140 140, 60 220))
  </a>
  <b>
    POLYGON(
      (100 180, 180 180, 180 100, 100 100, 100 180))
  </b>
<test>
  <op name="relate" arg3="212101212" arg1="A" arg2="B">
    true
  </op>
</test>
</case>

<case>
  <desc>AA A-shell overlapping B-shell at A &amp; B-vertex</desc>
  <a>
    POLYGON(
      (40 40, 180 40, 180 180, 40 180, 40 40))
  </a>
  <b>
    POLYGON(
      (180 40, 40 180, 160 280, 300 140, 180 40))
  </b>
<test>
  <op name="relate" arg3="212101212" arg1="A" arg2="B">
    true
  </op>
</test>
</case>

<case>
  <desc>AmA A-shells overlapping B-shell at A-vertex</desc>
  <a>
    POLYGON(
      (100 60, 140 100, 100 140, 60 100, 100 60))
  </a>
  <b>
    MULTIPOLYGON(
      (
        (80 40, 120 40, 120 80, 80 80, 80 40)), 
      (
        (120 80, 160 80, 160 120, 120 120, 120 80)), 
      (
        (80 120, 120 120, 120 160, 80 160, 80 120)), 
      (
        (40 80, 80 80, 80 120, 40 120, 40 80)))
  </b>
<test>
  <op name="relate" arg3="21210F212" arg1="A" arg2="B">
    true
  </op>
</test>
</case>

<case>
  <desc>AA A-shell touches B-shell, which contains A-hole</desc>
  <a>
    POLYGON(
      (40 280, 200 280, 200 100, 40 100, 40 280), 
      (100 220, 120 220, 120 200, 100 180, 100 220))
  </a>
  <b>
    POLYGON(
      (40 280, 180 260, 180 120, 60 120, 40 280))
  </b>
<test>
  <op name="relate" arg3="2121012F2" arg1="A" arg2="B">
    true
  </op>
</test>
</case>

<case>
  <desc>AA - A-hole contains B, boundaries touch in line</desc>
  <a>
    POLYGON(
      (0 200, 0 0, 200 0, 200 200, 0 200), 
      (20 180, 130 180, 130 30, 20 30, 20 180))
  </a>
  <b>
    POLYGON(
      (60 90, 130 90, 130 30, 60 30, 60 90))
  </b>
<test>
  <op name="relate" arg3="FF2F11212" arg1="A" arg2="B">
    true
  </op>
</test>
</case>

<case>
  <desc>AA - A-hole contains B, boundaries touch in points</desc>
  <a>
    POLYGON(
      (150 150, 410 150, 280 20, 20 20, 150 150), 
      (170 120, 330 120, 260 50, 100 50, 170 120))
  </a>
  <b>
    POLYGON(
      (270 90, 200 50, 150 80, 210 120, 270 90))
  </b>
<test>
  <op name="relate" arg3="FF2F01212" arg1="A" arg2="B">
    true
  </op>
</test>
</case>

</run>
